// $Id: cylrrs.hpp 14 2008-02-23 15:12:07Z msaushkin $
/**
  * @file
  * Описание интерфейса пространства имён cylrrs, используемого для восстановления полей остаточных 
  * напряжений и деформаций в цилиндрическом образце.
  *
  * Предназначен для восстановления полей остаточных напряжений и пластических деформаций 
  * в цилиндрическом образце после процедуры ППД по известной эпюре \f$\sigma_\theta^{\rm res}\f$.
  * @author Саушкин М.Н.
  */

/**
  * Интерфейс пространства имён для описания и реализации математической модели восстановления полей 
  * остаточных напряжений и пластических деформаций в цилиндрическом образце.
  *
  * Пример использования пространства имён cylrrs:
  *  
   \code
   // main.cpp
   #include<iostream> 
   #include "cylrrs.hpp"
   int main(){

   cylrrs::init(0.376, 0.016, -100, 20000, 1.0/3, 1.0);
   cylrrs::paraminfo();
   }
   \endcode
  *
  * Компиляция осуществляется следующим набором команд:
   \code
   g++  -Wall -I/usr/include -I/usr/local/include -I. -c cylrrs.cpp
   g++  -I. -c main.cpp
   g++  -L/usr/local/lib -o work cylrrs.o main.o -lgsl -lgslcblas -lm
   \endcode
  *
  */
namespace cylrrs{

   /** Инициализация параметров модели.
   *
   * @param params_radius
   *  радиус цилиндрического образца (мм);
   * @param params_h0
   *  глубина \f$h_0\f$ обнуления эпюры \f$\sigma_\theta^{\rm res}\f$ (мм);
   * @param params_sigmazv
   *  параметр \f$\sigma^*\f$ эпюры \f$\sigma_\theta^{\rm res}\f$ (кг/мм\f$^2\f$);
   * @param params_yuong
   *  модуль Юнга материала (кг/мм\f$^2\f$);
   * @param params_nu
   *  коэффициент Пуассона материала;
   * @param params_alpha
   *  параметр \f$\alpha\f$ гипотезы упрочнения.
   * @return 
   *  1 если инициализация прошла успешно.
   */
   int init(double params_radius,  double params_h0, 
            double params_sigmazv, double params_yuong, 
            double params_nu, double params_alpha);

   /** Вывод значений \f$\sigma_z^{\rm res}(r)\f$ по радиусу.
   *
   * @param r
   * значение текущего радиуса
   * @return 
   * Значение \f$\sigma_z^{\rm res}(r)\f$.
   */
   double getsigmaz(double);

   /** Вывод значений \f$\sigma_r^{\rm res}(r)\f$ по радиусу.
   *
   * @param r
   * значение текущего радиуса
   * @return 
   * Значение \f$\sigma_r^{\rm res}(r)\f$.
   */
   double getsigmar(double r);

   /** Вывод значений \f$\sigma_\theta^{\rm res}(r)\f$ по радиусу.
   *
   * @param r
   * значение текущего радиуса
   * @return 
   * Значение \f$\sigma_\theta^{\rm res}(r)\f$.
   */
   double getsigmatheta(double r);

   /** Вывод значений \f$q_z(r)\f$ по радиусу.
   *
   * @param r
   * значение текущего радиуса
   * @return 
   * Значение \f$q_z(r)\f$.
   */
   double getqz(double r);

   /** Вывод значений \f$q_r(r)\f$ по радиусу.
   *
   * @param r
   * значение текущего радиуса
   * @return 
   * Значение \f$q_r(r)\f$.
   */
   double getqr(double r);

   /** Вывод значений \f$q_\theta(r)\f$ по радиусу.
   *
   * @param r
   * Значение текущего радиуса
   * @return 
   * Значение \f$q_\theta(r)\f$.
   */
   double getqtheta(double r);

   /** Вывод всех параметров модели в поток (на экран).
   */
   void paraminfo();

   /** @return 
   * Радиус цилиндрического образца (мм).
   */
   double getradius();

   /** @return 
   * Глубина обнуления эпюры \f$\sigma_\theta^{\rm res}\f$ (мм).
   */
   double geth0();

   /** @return 
   * Значение эпюры \f$\sigma_\theta^{\rm res}\f$ на поверхности \f$r=a\f$ (кг/мм\f$^2\f$).
   */
   double getsigmazv();

   /** @return 
   * Модуль Юнга материала из которого изготовлен образец (кг/мм\f$^2\f$).
   */
   double getyuong();

   /** @return 
   * Коэффициент Пуассона \f$\nu\f$.
   */
   double getnu();

   /** @return 
   * Параметр  \f$\alpha\f$ гипотезы упрочнения.
   */
   double getalpha();

   /** @return 
   * Значение параметра  \f$b\f$ 
   */
   double getb();

   /** @return 
   * Параметр \f$\sigma_0\f$ аппроксимации эпюры \f$\sigma_\theta^{\rm res}\f$ (кг/мм\f$^2\f$).
   */
   double getsigma0();

   /** @return 
   * Параметр \f$\sigma_1\f$ аппроксимации эпюры \f$\sigma_\theta^{\rm res}\f$ (кг/мм\f$^2\f$).
   */
   double getsigma1();

/** @return 
   * Величина  \f$\varepsilon_z^0\f$ полной осевой деформации цилиндра.
   */
   double getepsz0();
};
